package com.oi.test01.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * @author bin
 * @date 2025 - 03 -17
 **/
public class MainTest02 {
    public static void main(String[] args) throws Exception {
        // 1.获取 Student 类的 Class 对象
        Class<?> clazz = Class
                .forName("com.oi.test01.entity.Student");

        // 在反射中，把类的相关信息封装为相关的对象
        // 2.通过 Class 对象，获取类的构造方法对象
        Constructor<?> constructor = clazz.getConstructor();

        // 3.实例化对象
        Object obj = constructor.newInstance();

        // 4.通过 Class 对象，获取要调用的方法
        // 语法：getMethod("方法名",方法参数的 Class 对象,...)
        Method method = clazz
                .getMethod("sayHello",String.class);

        // sayHello(String who,int age)

        // 5.调用方法 - 对象.xxx() ;
        // 在 Method 对象中，提供了 invoke 方法，调用 Method 对象指向的方法
        // 语法：[Object obj = ]invoke("对象名称",实参列表,...)
        method.invoke(obj,"张三");
    }
}
